\documentclass[a4paper]{article}
\usepackage[a4paper,margin=2cm,top=2.0cm,bottom=2.34cm]{geometry}
\usepackage[spanish,activeacute]{babel}
\usepackage[T1]{fontenc}
\usepackage{algo2symb}
\usepackage{newalgo}

\parskip=1.5ex
\pagestyle{empty}

\newcommand\interfaz[5]{\noindent \\#1\ifblank{#2}\then{}\else{($#2$)}\fi \ifblank{#3}\then{}\else{$\rightarrow$ $#3$}\fi \\ \{$#4$\} \\ \{$#5$\}}
\newcommand\estr[2]{\noindent \textbf{Estructura} \\#1 src estr\_#1 donde estr\_#1 es:\\ #2}
\newcommand\rep[2]{\noindent \textbf{Invariante de representacion} \\Rep: estr\_#1 $\rightarrow$ bool\\ ($\forall$ e: estr\_conj) Rep(e) = \\ \hspace*{1em} #2}
\newcommand\abs[3]{\noindent \textbf{Funcion de abstraccion} \\Abs: estr\_#1 e $\rightarrow$ #1 \hspace{3em}(Rep(e))\\ Abs(e) = #2 / \\ \hspace*{1em} $#3$}
\newcommand\complejidad[2]{\noindent \comentario{Complejidad: \Ode{#1}\ifblank{ #2}\then{}\else{(#2)}\fi}}

\begin{document}

\noindent \textbf{Modulo conjunto}

\noindent Se explica con la especificacion de Conjunto($\alpha$) \\
\textbf{usa:} lista \\
\textbf{generos:} conj($\alpha$)

\noindent \textbf{Interfaz}

\complejidad{1}{}
\interfaz{Vacio}{}{res\!: conj(alpha)}{true}{res \igobs \emptyset}

\complejidad{n}{donde n es la cantidad de elementos en el conjunto}
\interfaz{Agregar}{\param{in}{a}{\alpha},\param{inout}{c}{conj(\alpha)}}{}{c \igobs {c}_{0}}{c \igobs Ag(a,{c}_{0})}

\complejidad{n}{donde n es la cantidad de elementos en el conjunto}
\interfaz{Pertenece}{\param{in}{a}{\alpha}, \param{in}{c}{conj(\alpha)}}{res\!: bool}{true}{a \in c}

\estr{conjunto}{lista($\alpha$)}

\rep{conjunto}{($\forall$ i,j: nat, i$\neq$j) Iesimo(i,e) $\neq$ Iesimo(j,e)  \comentario{No hay elementos repetidos}}

\abs{conjunto}{c}{(\forall a: \alpha) Esta(a,e) \igobs a \in c}

\noindent \textbf{Algoritmos}

\medskip

\begin{algorithm}{iVacio}{}{res\!: estr\_conj}
	res \= iNueva
\end{algorithm}


\begin{algorithm}{iAgregar}{\param{in}{a}{\alpha},\param{inout}{c}{estr\_conj\dealfa}}{}
	\begin{IF}{\neg iEsta(a,c)}\\
			iAgregar(a,c)
	\end{IF}
\end{algorithm}



\begin{algorithm}{iPertenece}{\param{in}{a}{\alpha},\param{in}{c}{estr\_conj\dealfa}}{res\!: bool}
	res \= iEsta(a,c)
\end{algorithm}

\end{document}
